home *** CD-ROM | disk | FTP | other *** search
/ Aminet 43 / Aminet 43 (2001)(GTI - Schatztruhe)[!][Jun 2001].iso / Aminet / game / 2play / LegoBlast.lha / extras / LevelEditor.AMOS / LevelEditor.amosSourceCode < prev    next >
AMOS Source Code  |  1980-11-25  |  25KB  |  1,234 lines

  1. '  
  2. '  
  3. Screen Open 4,320,20,64,Lowres : Paper 0 : Curs Off : Cls 0 : Flash Off 
  4. Screen Hide 4
  5. 'Screen Open 3,320,256,64,Lowres : Paper 0 : Curs Off : Cls 0 : Flash Off : Change Mouse 2 
  6. Screen Open 2,640,20,16,Hires : Paper 0 : Curs Off : Cls 0 : Flash Off 
  7. Screen Hide 2
  8. Limit Mouse 128,46 To 320+128,280+46
  9.  
  10. Screen Open 0,320,256,64,Lowres : Paper 0 : Curs Off : Cls 0 : Flash Off : Change Mouse 2
  11.  
  12.  
  13. Dim B(18,14),BL(40),TELE(100,4),BONUS(30),POUR(30),PS(30),A$(30),BONUS2(30),CORR(16),CORR2(16)
  14. Dim NBONUS(30),RBONUS(30),RBONUS2(30)
  15. Dim Y(20),V(20),REC(2,2),POS(8,2)
  16.  
  17. TELE=0
  18. NUM$=""
  19.  
  20. '**************************      
  21. _DECAL=20
  22. '**************************      
  23. Global _DECAL
  24.  
  25. For A=0 To 10
  26.    BL(A)=0
  27. Next 
  28.  
  29. For A=1 To 30
  30.    BONUS(A)=0
  31.    BONUS2(A)=10
  32. Next 
  33.  
  34. For X=0 To 18
  35.    For Y=0 To 14
  36.       B(X,Y)=-1
  37.    Next 
  38. Next 
  39.  
  40. CORR: Data 3,5,6,7,9,10,11,12,13,14,15
  41. Restore CORR
  42. For A=0 To 10 : Rem   les 11 blocs sont coll�s dans l'�diteur
  43.    Read C : Rem       mais on les s�pare en binaire pour les tests.
  44.    CORR(A)=C+32
  45. Next 
  46.  
  47. For A=0 To 16
  48.    For B=0 To 10
  49.       If CORR(B)-32=A Then CORR2(A)=B+_DECAL : Exit 
  50.    Next 
  51. Next 
  52.  
  53.  
  54. 'DEST$="progs:dp/ablaze's/bordel/" 
  55.  
  56. DEST$="asm:lego/binary/"
  57.  
  58. If Length(8)=0 Then Load Iff DEST$+"extra/bobs_nus26.iff",1 : Spack 1 To 8 Else Unpack 8 To 1
  59. Screen Hide 1
  60. Screen 4 : Get Palette 1
  61. 'Screen 3 : Get Palette 1
  62. Screen 2
  63. Locate 0,0 : Print "/"
  64. Locate 2,0 : Print "F"
  65. Locate 4,0 : Print "ND"
  66. Locate 6,0 : Print "D"
  67. Get Palette 1
  68. Screen To Front 0
  69. Screen 0
  70. Get Palette 1
  71. Ink 1
  72. Box 0,0 To 19*16,16*15
  73.  
  74.  
  75. For X=0 To 18
  76.    For Y=0 To 14
  77.       B(X,Y)=-1
  78.    Next 
  79. Next 
  80.  
  81. '********* Index pour les bonus qui ne sont pas des maladies 
  82. ' On a N� du bonus (correspondant ï¿½ l'asm) , N� du bonus (avec des trous: 1,2,3,10,...)
  83. ' le N� du bonus commence ï¿½ 1 car 0=pas de bonus 
  84. NBONUS: Data 60,1,30,2,55,3,70,10,75,11,95,15,65,16,90,17,190,19,285,20,290,21,85,22,-1
  85. Restore NBONUS
  86. NBBONUS=0
  87. Screen 4
  88. Do 
  89.    Read P
  90.    If P=-1 Then Exit 
  91.    _GETBL[P]
  92.    Screen 4
  93.    Paste Bob NBBONUS*16,0,1
  94.    Inc NBBONUS
  95.    NBONUS(NBBONUS)=P
  96.    Read RBONUS(NBBONUS)
  97.    RBONUS2(RBONUS(NBBONUS))=NBBONUS : Rem pour correspondance inverse
  98. Loop 
  99. '********* 
  100. '**************************      POUR CONVERSIONS
  101. Goto NOCONV
  102. Screen 0 : Screen To Front 0 : Screen Show 0
  103. Trap Mkdir DEST$+"Ok"
  104. Set Dir 36,""
  105. D$=Dir First$(DEST$)
  106. While D$<>""
  107.    D$=Left$(D$,35)-" "
  108.    Print D$
  109.    If Lower$(Left$(D$,10))="lego_level"
  110.       If Lower$(Right$(D$,4))=".dat"
  111.          I=Instr(D$,".")
  112.          N2=Val(Mid$(D$,11,I-11))
  113.          Print "ok ";N2
  114.          RETRACE_ENABLE=0
  115.          _LOAD[N2]
  116.          If Param=-1
  117.             Print "Level";N2
  118.             _SAVE[N2]
  119.             Rename DEST$+D$ To DEST$+"ok/"+D$
  120.          End If 
  121.          RIEN:
  122.       End If 
  123.    End If 
  124.    D$=Dir Next$
  125. Wend 
  126.  
  127. Edit 
  128. NOCONV:
  129. '**************************      
  130. RETRACE_ENABLE=1
  131.  
  132. N=-1
  133.  
  134. MAIN:
  135. Screen To Front 0
  136. Screen 0
  137. Screen To Back 2
  138.  
  139. While Mouse Key<>0
  140. Wend 
  141. Repeat 
  142.    If Key State(69) Then Edit 
  143.    If Key State(40) Then _LOAD[-1] : N=-1
  144.    If Key State(33) Then _SAVE[-1] : N=-1
  145.    If Key State(70) Then RETRACE
  146.    If Key State(95) Then Goto HELP
  147.    If Key State(53) Then Goto BONUS
  148.    If Key State(20) Then Goto _MODE_TELE
  149.    If Key State(64) Then Goto REGLAGES
  150.    If Key State(89) Then Goto POSEBONUS
  151.    If Key State(35) Then Goto RECTANGLE
  152.    If Key State(25) Then Goto POSITION
  153.    'For A=80 To 88
  154.    '   If Key State(A) Then CHOIX[A-80] : RETRACE 
  155.    'Next  
  156.    
  157.    M=Mouse Key
  158.    X=(X Screen(X Mouse)/16)
  159.    Y=(Y Screen(Y Mouse)/16)
  160.    If M=1 and N>=-1 and X>=0 and Y>=0 and X<=18 and Y<=14
  161.       If N=-1
  162.          Ink 0
  163.          Bar X*16,Y*16 To X*16+15,Y*16+15
  164.       Else 
  165.          Ink 0
  166.          Bar X*16,Y*16 To X*16+15,Y*16+15
  167.          Paste Bob X*16,Y*16,1
  168.       End If 
  169.       If X>-1 and Y>-1
  170.          B(X,Y)=CHOIX
  171.       End If 
  172.    End If 
  173.    
  174. Until M=2
  175.  
  176. Screen To Front 2
  177. Screen Show 2
  178. Screen 2
  179. While Mouse Key
  180. Wend 
  181. Repeat 
  182.    M=Mouse Key
  183. Until M=1 or M=2
  184. Screen Hide 2
  185. Y=Y Screen(Y Mouse)
  186. If M=2 and Y>30 Then Goto MAIN
  187. X=X Screen(X Mouse)/16-1
  188. If X<-1
  189.    X=-1
  190. End If 
  191. If X>_DECAL+20
  192.    X=_DECAL+20
  193. End If 
  194.  
  195. If M=2
  196.    CHOIX[X]
  197.    RETRACE
  198.    Goto MAIN
  199. End If 
  200.  
  201. CHOIX=X
  202. If CHOIX=-1 Then N=-1 : Goto MAIN
  203. N=BL(CHOIX) : Rem   N=N� dessin    CHOIX=type choisi 
  204. 'Dec CHOIX 
  205. _GETBL[N]
  206. Goto MAIN
  207.  
  208. Procedure CHOIX[N]
  209.    Shared BL()
  210.    Screen To Front 1
  211.    Screen Show 1
  212.    Screen 1
  213.    
  214.    Multi Wait 
  215.    While Mouse Key<>0
  216.    Wend 
  217.    
  218.    Repeat 
  219.       M=Mouse Key
  220.       If M=2 Then Screen To Front 0 : Screen 0 : Screen Hide 1 : Pop Proc
  221.    Until M=1
  222.    
  223.    X=(X Screen(X Mouse)/16)
  224.    Y=(Y Screen(Y Mouse)/17)
  225.    N2=X*15+Y
  226.    _GETBLP[X,Y]
  227.    BL(N)=N2
  228.    'Get Bob 1,X,Y To X+16,Y+16
  229.    Screen 2
  230.    Ink 0
  231.    Bar(N+1)*16,0 To(N+1)*16+15,15
  232.    Paste Bob(N+1)*16,0,1
  233.    
  234.    Screen To Front 0
  235.    Screen 0
  236.    While Mouse Key
  237.    Wend 
  238.    Screen Hide 1
  239. End Proc
  240.  
  241. Procedure _SAVE[NUM]
  242.    Shared BL(),B(),DEST$,TIME1,TIME2,SPEED,NUM$,TELE,TELE(),BONUS(),CORR(),NOM$,V(),REC(),POS()
  243.    Clear Key 
  244.    Home 
  245.    If NUM=-1
  246.       Put Key(NUM$)
  247.       Input "N� du level a sauver (-1=Quit) : ";NUM
  248.    End If 
  249.    NUM$=Right$("000"+Str$(NUM)-" ",3)
  250.    LEV$="Lego_Level"
  251.    TEMP$=DEST$+LEV$+NUM$
  252.    Reserve As Work 5,10000
  253.    Reserve As Work 6,10000
  254.    ST=Start(5)
  255.    PTRW=Start(6)
  256.    ADR=ST
  257.    F$=Chr$(9)+"Dc.w"+Chr$(9)
  258.    '**************************     DEBUT DE LA GENERATION DU FICHIER LEVEL
  259.    MEMNOM=ADR
  260.    Add ADR,4
  261.    Loke ADR,V(1) : Add ADR,4
  262.    Loke ADR,V(2) : Add ADR,4
  263.    DK[ADR,REC(1,1)] : Add ADR,2 : Rem  RECTANGLE DE REMPLISSAGE  
  264.    DK[ADR,REC(2,1)] : Add ADR,2
  265.    DK[ADR,REC(1,2)] : Add ADR,2
  266.    DK[ADR,REC(2,2)] : Add ADR,2
  267.    DK[ADR,V(7)] : Add ADR,2 : Rem      NB TOURS RECTANGLE
  268.    DK[ADR,V(3)] : Add ADR,2 : Rem      SPEED 
  269.    DK[ADR,V(4)] : Add ADR,2 : Rem      BOMBES
  270.    DK[ADR,V(5)] : Add ADR,2 : Rem      FLAMMES 
  271.    DK[ADR,V(6)] : Add ADR,2 : Rem      POUSSE BOMBES 
  272.    For A=1 To 8
  273.       DK[ADR,POS(A,1)] : Add ADR,2
  274.       DK[ADR,POS(A,2)] : Add ADR,2
  275.    Next 
  276.    DK[ADR,V(8)] : Add ADR,2 : Rem      N� PALETTE
  277.    DK[ADR,V(9)] : Add ADR,2 : Rem      N� FLAMME 
  278.    
  279.    '************** Images pour tout 
  280.    
  281.    ' DECAL=-1 est utilis� par le tuyau ET par le t�l�porteur! 
  282.    ' donc cette affectation est ï¿½ faire obligatoirement au moment de
  283.    ' la sauvegarde !!!
  284.    BL(_DECAL)=135 : Rem                      TELEPORTEUR 
  285.    
  286.    For A=0 To 29
  287.       If BL(A)<0 Then BL(A)=0
  288.       DK[ADR,BL(A)]
  289.       Add ADR,2
  290.       F$=F$+Str$(BL(A))-" "+","
  291.    Next 
  292.    F$=Left$(F$,Len(F$)-1)
  293.    F$=F$+Chr$(10)
  294.    Poke$ PTRW,F$ : Add PTRW,Len(F$)
  295.    
  296.    '************** Temps bombe level
  297.    
  298.    DK[ADR,V(10)] : Add ADR,2
  299.    
  300.    '************** AutoFire 
  301.    DK[ADR,V(11)] : Add ADR,2
  302.    
  303.    '************** "Vide" 
  304.    
  305.    For A=1 To 18
  306.       DK[ADR,0] : Add ADR,2
  307.    Next 
  308.    
  309.    '************** Probabilit�s bonus 
  310.    For A=1 To 30
  311.       V=BONUS(A)
  312.       DK[ADR,V] : Add ADR,2
  313.       F$=F$+Str$(V)-" "+","
  314.    Next 
  315.    F$=Left$(F$,Len(F$)-1)
  316.    F$=F$+Chr$(10)
  317.    Poke$ PTRW,F$ : Add PTRW,Len(F$)
  318.    For Y=0 To 14
  319.       F$=Chr$(9)+"Dc.b"+Chr$(9)
  320.       For X=0 To 18
  321.          B=B(X,Y)
  322.          If B>=_DECAL and B<64
  323.             B=CORR(B-_DECAL)
  324.          End If 
  325.          Poke ADR,B
  326.          Inc ADR
  327.          F$=F$+Str$(B)-" "+","
  328.       Next 
  329.       F$=Left$(F$,Len(F$)-1)
  330.       F$=F$+Chr$(10)
  331.       Poke$ PTRW,F$ : Add PTRW,Len(F$)
  332.    Next 
  333.    Poke ADR,-1
  334.    Inc ADR
  335.    If TELE=0 Then Goto _NOP
  336.    For A=1 To TELE
  337.       DK[ADR,TELE(A,1)*2]
  338.       DK[ADR+2,TELE(A,2)*2]
  339.       DK[ADR+4,TELE(A,3)*2]
  340.       DK[ADR+6,TELE(A,4)*2]
  341.       Add ADR,8
  342.       F$=Chr$(9)+"Dc.w"+Chr$(9)+Str$(TELE(A,1))-" "+"*2,"+Str$(TELE(A,2))-" "+"*2,"+Str$(TELE(A,3))-" "+"*2,"+Str$(TELE(A,4))-" "+"*2"
  343.       F$=F$+Chr$(10)
  344.       Poke$ PTRW,F$ : Add PTRW,Len(F$)
  345.    Next 
  346.    _NOP:
  347.    DK[ADR,-1] : Add ADR,2
  348.    F$=Chr$(9)+"Dc.w"+Chr$(9)+"-1"
  349.    F$=F$+Chr$(10)
  350.    Poke$ PTRW,F$ : Add PTRW,Len(F$)
  351.    
  352.    Loke MEMNOM,ADR-Start(5) : Rem   OFFSET du nom du LEVEL ! 
  353.    Poke$ ADR,NOM$+Chr$(0) : Add ADR,Len(NOM$)+1
  354.    F$=Chr$(9)+"Dc.b"+Chr$(9)+"'"+NOM$+"',0"
  355.    F$=F$+Chr$(10)
  356.    Poke$ PTRW,F$ : Add PTRW,Len(F$)
  357.    
  358.    Bsave TEMP$+".dat",Start(5) To ADR
  359.    '   Bsave TEMP$+".i",Start(6) To PTRW
  360.    For A=_DECAL To _DECAL+10
  361.       BL(A)=196+A-_DECAL
  362.    Next 
  363.    RETRACE
  364. End Proc
  365.  
  366. Procedure _LOAD[NUM]
  367.    Shared B(),DEST$,BL(),NUM$,TELE,TELE(),BONUS(),BONUS2(),CORR2(),V(),REC(),POS(),NOM$
  368.    Clear Key 
  369.    Home 
  370.    If NUM=-1
  371.       Input "N� du level ï¿½ charger (-1=Quit) : ";NUM
  372.    End If 
  373.    NUM$=Right$("000"+Str$(NUM)-" ",3)
  374.    LEV$="Lego_Level"
  375.    Reserve As Work 5,5000
  376.    Fill Start(5) To Start(5)+5000,-1 : Rem   Pour ï¿½viter les bugs t�l�porteurs !
  377.    Trap Bload DEST$+LEV$+NUM$+".dat",5
  378.    If Errtrap Then Boom : RETRACE : Pop Proc[0]
  379.    ADR=Start(5)
  380.    Screen 2
  381.    Cls 0
  382.    Locate 0,0 : Print "/"
  383.    Locate 2,0 : Print "F"
  384.    Locate 4,0 : Print "ND"
  385.    Locate 6,0 : Print "D"
  386.    'Screen To Front 2 
  387.    
  388.    D=Deek(ADR)
  389.    If D>0 Then Goto OLD
  390.    D=Leek(ADR)
  391.    NOM$=Peek$(Start(5)+D,50,Chr$(0))
  392.    Add ADR,4
  393.    V(1)=Leek(ADR) : Add ADR,4
  394.    V(2)=Leek(ADR) : Add ADR,4
  395.    DEK[ADR] : Add ADR,2 : REC(1,1)=Param
  396.    DEK[ADR] : Add ADR,2 : REC(2,1)=Param
  397.    DEK[ADR] : Add ADR,2 : REC(1,2)=Param
  398.    DEK[ADR] : Add ADR,2 : REC(2,2)=Param
  399.    DEK[ADR] : Add ADR,2 : V(7)=Param
  400.    DEK[ADR] : Add ADR,2 : V(3)=Param
  401.    DEK[ADR] : Add ADR,2 : V(4)=Param
  402.    DEK[ADR] : Add ADR,2 : V(5)=Param
  403.    DEK[ADR] : Add ADR,2 : V(6)=Param
  404.    For A=1 To 8
  405.       DEK[ADR] : Add ADR,2 : POS(A,1)=Param
  406.       DEK[ADR] : Add ADR,2 : POS(A,2)=Param
  407.    Next 
  408.    DEK[ADR] : Add ADR,2 : V(8)=Param
  409.    DEK[ADR] : Add ADR,2 : V(9)=Param
  410.    OLD:
  411.    
  412.    For A=0 To 29 : Rem   19  ou 7 
  413.       DEK[ADR]
  414.       BL(A)=Param : Add ADR,2
  415.       If BL(A)=0 Then BL(A)=-1
  416.       If BL(A)>330 Then BL(A)=-1
  417.    Next 
  418.    
  419.    If BL(3)=-1 Then BL(3)=BL(1)
  420.    BL(4)=176 : Rem  Anti feu  
  421.    BL(5)=177 : Rem  Anti mec
  422.    BL(6)=178 : Rem  Anti feu+mec
  423.    BL(7)=179 : Rem  Explo 
  424.    BL(8)=231 : Rem   Bumper H 
  425.    BL(9)=231+16 : Rem   Bumper B 
  426.    BL(10)=231+24 : Rem   Bumper G 
  427.    BL(11)=231+8 : Rem   Bumper D 
  428.    'BL(12)=295 : Rem  Fl�che Haut 
  429.    'BL(13)=296 : Rem  Fl�che Droite 
  430.    'BL(14)=297 : Rem  Fl�che Bas  
  431.    'BL(15)=298 : Rem  Fl�che Gauche 
  432.    'BL(16)=299 : Rem  Dalle explosive 
  433.    
  434.    
  435.    '   If BL(_DECAL-1)<=0 Then BL(_DECAL-1)=143 : Rem     BLOC FIN NIVEAU 
  436.    
  437.    'BL(_DECAL-1)=BL(_DECAL-1-5) 
  438.    
  439.    
  440.    'For A=5 To 14 
  441.    '   BL(A)=-1 
  442.    'Next  
  443.    'If BL(_DECAL-1)=-1 Then BL(_DECAL-1)=143
  444.    
  445.    For A=_DECAL To _DECAL+10
  446.       BL(A)=196+A-_DECAL
  447.    Next 
  448.    For A=0 To 29
  449.       If BL(A)>-1
  450.          _GETBL[BL(A)]
  451.          Screen 2
  452.          Paste Bob(A+1)*16,0,1
  453.       End If 
  454.    Next 
  455.    '   If BL(5)<=0
  456.    '      BL(5)=135 
  457.    '      _GETBL[BL(5)] 
  458.    '      Screen 2
  459.    '      Paste Bob(3+1)*16,0,1 
  460.    '   End If 
  461.    
  462.    '**************************     DEBUT A ENLEVEL
  463.    
  464.    DEK[ADR] : Add ADR,2 : V(10)=Param : Rem     Temps bombe      
  465.    If V(10)=0 Then V(10)=15
  466.    
  467.    DEK[ADR] : Add ADR,2 : V(11)=Param : Rem     Autofire       
  468.    If V(11)<>0 Then V(11)=-1 : Rem   Que ce soit -1,1 ou 65535 ...
  469.   ' V(11)=-1 
  470.    
  471.    
  472.    '*************     "Vide" au cas o�  
  473.    For A=1 To 18
  474.       Add ADR,2
  475.    Next 
  476.    '**************************     FIN    
  477.    For A=1 To 30
  478.       DEK[ADR]
  479.       BONUS2(A)=BONUS(A)
  480.       BONUS(A)=Param
  481.       Add ADR,2
  482.    Next 
  483.    'Add ADR,30*2 : Rem    Probabilit�s des bonus  
  484.    'Print ADR-Start(5) : Wait Key 
  485.    '  Screen 0
  486.    For Y=0 To 14
  487.       For X=0 To 18
  488.          B=Peek(ADR)
  489.          '        Print B : Wait Key  
  490.          If B>=32 and B<64
  491.             'Tuyau ! 
  492.             B=CORR2(B-32)
  493.          Else 
  494.             If B>3 and B<64
  495.                '     B=B+1
  496.             End If 
  497.          End If 
  498.          B(X,Y)=B
  499.          If B(X,Y)=255 Then B(X,Y)=-1
  500.          Inc ADR
  501.       Next 
  502.    Next 
  503.    'Print KO,ADR-Start(5) : Wait Key  
  504.    Screen 0
  505.    'T�l�porteurs
  506.    TELE=0
  507.    '   Screen 0 
  508.    Inc ADR : Rem ADRESSE PAIRE !!! ET CETTE FOIS C'EST L'ASM QUI M'a plant� ! 
  509.    Do 
  510.       DEK[ADR]
  511.       T=Param : Add ADR,2
  512.       If T=65535 or T=255 Then Exit 
  513.       Inc TELE
  514.       If TELE=101 Then TELE=0 : Exit 
  515.       TELE(TELE,1)=T/2
  516.       DEK[ADR]
  517.       TELE(TELE,2)=Param/2
  518.       DEK[ADR+2]
  519.       TELE(TELE,3)=Param/2
  520.       DEK[ADR+4]
  521.       TELE(TELE,4)=Param/2
  522.       Add ADR,6
  523.       'Print TELE(TELE,1),TELE(TELE,2),TELE(TELE,3),TELE(TELE,4) 
  524.    Loop 
  525.    '   Wait Key 
  526.    _NOT: RETRACE
  527.    If TELE=0 Then Pop Proc[-1]
  528.    For A=1 To TELE
  529.       X1=TELE(A,1)*16+8
  530.       Y1=TELE(A,2)*16+8
  531.       X2=TELE(A,3)*16+8
  532.       Y2=TELE(A,4)*16+8
  533.       Ink 1
  534.       Draw X1,Y1 To X2,Y2
  535.       Circle X1,Y1,3
  536.    Next 
  537. End Proc[-1]
  538.  
  539. Procedure RETRACE
  540.    Shared B(),BL(),NBONUS(),RBONUS(),RBONUS2(),RETRACE_ENABLE
  541.    If RETRACE_ENABLE=0 Then Pop Proc
  542.    For X=0 To 18
  543.       For Y=0 To 14
  544.          N=B(X,Y)
  545.          If N>-1
  546.             If N>=64
  547.                ' Bonus visibles au d�but du niveau
  548.                Trap N=NBONUS(RBONUS2(N-64))
  549.                If Errtrap
  550.                   N=0
  551.                End If 
  552.             Else 
  553.                N=BL(N)
  554.             End If 
  555.             If N>-1
  556.                _GETBL[N]
  557.                Screen 0
  558.                Ink 0
  559.                Bar X*16,Y*16 To X*16+15,Y*16+15
  560.                Paste Bob X*16,Y*16,1
  561.             Else 
  562.                Screen 0
  563.                Ink 0
  564.                Bar X*16,Y*16 To X*16+15,Y*16+15
  565.             End If 
  566.          Else 
  567.             Ink 0
  568.             Bar X*16,Y*16 To X*16+15,Y*16+15
  569.          End If 
  570.       Next 
  571.    Next 
  572.    
  573. End Proc
  574.  
  575. Procedure LISTE�
  576.    Shared BL()
  577.    
  578.    For A=0 To 10
  579.       If BL(A)>-1
  580.          _GETBL[BL(A)]
  581.          Screen 2
  582.          Paste Bob A*16,0,1
  583.       Else 
  584.          Screen 2
  585.          Ink 0
  586.          Bar A*16,0 To A*16+15,15
  587.       End If 
  588.    Next 
  589.    
  590. End Proc
  591.  
  592. Procedure _GETBL[N]
  593.    
  594.    X2=N/15
  595.    Y2=N mod 15
  596.    Screen 1
  597.    Get Bob 1,X2*16,Y2*17+1 To X2*16+16,Y2*17+1+16
  598.    
  599. End Proc
  600.  
  601. Procedure _GETBLP[X2,Y2]
  602.    
  603.    Screen 1
  604.    Get Bob 1,X2*16,Y2*17+1 To X2*16+16,Y2*17+1+16
  605.    
  606. End Proc
  607.  
  608. _MODE_TELE:
  609. Curs On 
  610. Locate 0,0 : Print "TELEPORT"
  611. Curs Off 
  612. Screen Open 3,320,256,64,Lowres : Paper 0 : Curs Off : Cls 0 : Flash Off : Change Mouse 2
  613. Screen Hide 3
  614. Get Palette 1
  615. Screen 0
  616. Screen Copy 0 To 3
  617. While Key State(20)
  618. Wend 
  619. CONTELE:
  620. Screen Copy 3 To 0
  621. If TELE=0 Then Goto _NOTE
  622. For A=1 To TELE
  623.    X1=TELE(A,1)*16+8
  624.    Y1=TELE(A,2)*16+8
  625.    X2=TELE(A,3)*16+8
  626.    Y2=TELE(A,4)*16+8
  627.    Ink 4
  628.    Draw X1,Y1 To X2,Y2
  629.    Circle X1,Y1,3
  630. Next 
  631. _NOTE:
  632. Repeat 
  633.    If Key State(20)
  634.       Screen Close 3
  635.       While Key State(20)
  636.       Wend 
  637.       RETRACE
  638.       Goto MAIN
  639.    End If 
  640.    M=Mouse Key
  641.    X=X Screen(X Mouse)/16
  642.    Y=Y Screen(Y Mouse)/16
  643. Until M<>0
  644. 'gauche:modif   droit:cr�ation 
  645. NUM=-1
  646. FOUND=0
  647. For A=1 To TELE
  648.    If X=TELE(A,1) and Y=TELE(A,2) Then Inc FOUND : NUM=A
  649. Next 
  650. If NUM=-1
  651.    If M=2
  652.       Goto CREAT
  653.    End If 
  654.    Goto _NOTE
  655. End If 
  656. ACT=0
  657. RETRACE
  658. Curs On 
  659. Locate 0,0 : Print "TELEPORT"
  660. Curs Off 
  661. If TELE=0 Then Goto _NOTE2
  662. For A=1 To TELE
  663.    If A=NUM Then Goto NON
  664.    X1=TELE(A,1)*16+8
  665.    Y1=TELE(A,2)*16+8
  666.    X2=TELE(A,3)*16+8
  667.    Y2=TELE(A,4)*16+8
  668.    Ink 4
  669.    Draw X1,Y1 To X2,Y2
  670.    Circle X1,Y1,3
  671.    NON:
  672. Next 
  673. _NOTE2:
  674. Screen Copy 0 To 3
  675. X1=TELE(NUM,1)*16+8 : Rem on met en brillant ce que l'on modifie 
  676. Y1=TELE(NUM,2)*16+8
  677. X2=TELE(NUM,3)*16+8
  678. Y2=TELE(NUM,4)*16+8
  679.  
  680. _MODIF:
  681. Rem  act 0=Source, 2=Cible 
  682. While Mouse Key<>0
  683. Wend 
  684. Screen Copy 0 To 3 : Rem   Avec tous les traits 
  685. Repeat 
  686.    If Key State(70) Then Goto DEL
  687.    Screen Copy 3 To 0
  688.    M=Mouse Key
  689.    If M=2
  690.       ACT=2-ACT
  691.       While Mouse Key
  692.       Wend 
  693.    End If 
  694.    X=X Screen(X Mouse)/16
  695.    Y=Y Screen(Y Mouse)/16
  696.    If ACT=0 Then X1=X*16+8 : Y1=Y*16+8 Else X2=X*16+8 : Y2=Y*16+8
  697.    Ink 7
  698.    Draw X1,Y1 To X2,Y2
  699.    Circle X1,Y1,3
  700. Until M=1
  701. TELE(NUM,1)=X1/16
  702. TELE(NUM,2)=Y1/16
  703. TELE(NUM,3)=X2/16
  704. TELE(NUM,4)=Y2/16
  705. While Mouse Key
  706. Wend 
  707. Goto CONTELE
  708.  
  709. DEL:
  710. Dec TELE
  711. If NUM=TELE+1 Then Goto CONTELE
  712. For A=NUM To TELE
  713.    For B=1 To 4
  714.       TELE(A,B)=TELE(A+1,B)
  715.    Next 
  716. Next 
  717. Goto CONTELE
  718.  
  719.  
  720. CREAT:
  721. Inc TELE
  722. X1=X*16+8
  723. Y1=Y*16+8
  724. X2=8
  725. Y2=8
  726. ACT=2
  727. TELE(TELE,1)=X1
  728. TELE(TELE,2)=Y1
  729. TELE(TELE,3)=X2
  730. TELE(TELE,4)=Y2
  731. NUM=TELE
  732. Goto _MODIF
  733.  
  734.  
  735. Procedure DK[ADR,V]
  736.    ' Proc�dure qui sert ï¿½ faire un DOKE sur une adresse impaire ! 
  737.    ' PUTAIN D'AMOS DE MERDE !!!!    
  738.    V1=V and $FF00
  739.    V2=V and $FF
  740.    Poke ADR,V1/256
  741.    Poke ADR+1,V2
  742. End Proc
  743. Procedure DEK[ADR]
  744.    ' Proc�dure qui sert ï¿½ faire un DEEK sur une adresse impaire ! 
  745.    ' PUTAIN D'AMOS DE MERDE !!!!    
  746.    
  747.    '   V=Deek(ADR)
  748.    '   Pop Proc[V]
  749.    V1=Peek(ADR)
  750.    V2=Peek(ADR+1)
  751.    V=V1*256+V2
  752. End Proc[V]
  753.  
  754.  
  755. BONUS:
  756. Data '"Rien"'
  757. Data "Flamme","Bombe","Pousse Bombe","Maladie inversion"
  758. Data "Maladie ptt flammes","Maladie time bombe fast","Maladie speed slow","Maladie speed fast","Maladie time bomb slow","Maladie camembert","maladie gele bombes","maladie grd flammes"
  759. Data "maladie plus de bombes","maladie +10 bombes","maladie goutte d'eau","trousse de secours","horloge","Bombe rebond","Bombes folles"
  760. Data "+5 bombes","+10 flammes","Cadeau","maladie collique"
  761. Data "***"
  762. 'Screen 3 : Get Palette 0
  763. Screen Open 0,640,512,8,Hires+Laced : Paper 0 : Curs Off : Cls 0 : Flash Off : Hide On 
  764. Pen 4
  765. Locate 5,0 : Print "Autorisation des bonus pour le niveau"
  766. Restore BONUS
  767. Y=0
  768. Pen 2
  769. Do 
  770.    Read A$
  771.    If A$="***" Then Exit 
  772.    Inc Y
  773.    A$(Y)=A$
  774.    Locate 0,Y : Print A$
  775. Loop 
  776.  
  777. Colour 5,$F0F
  778. Colour 7,$222
  779. Y=1
  780. RET:
  781. Ink 4
  782. Gosub CALC
  783. Gosub ALL
  784. T=Y
  785. M=1
  786. Gosub TRACE
  787. ' Attente rel�chement fl�ches ou appui sur shift 
  788. While(Key State(76) or Key State(77)) and Not(Key State(96) or Key State(97))
  789. Wend 
  790. Do 
  791.    If Key State(53)
  792.       Screen Open 0,320,256,64,Lowres : Paper 0 : Curs Off : Cls 0 : Flash Off : Show On : Change Mouse 2
  793.       Get Palette 1
  794.       'Get Palette 3 
  795.       RETRACE
  796.       While Key State(53)
  797.       Wend 
  798.       Goto MAIN
  799.    End If 
  800.    If Key State(19)
  801.       For A=1 To 30
  802.          BONUS(A)=BONUS2(A)
  803.       Next 
  804.       Goto RET
  805.    End If 
  806.    DY=Key State(76)-Key State(77)
  807.    If DY<>0
  808.       If Y+DY>=1 and Y+DY<=30
  809.          Pen 2 : Paper 0
  810.          Locate 0,Y
  811.          Print A$(Y)
  812.          Add Y,DY
  813.          Pen 0 : Paper 2
  814.          Locate 0,Y
  815.          Print A$(Y)
  816.          Goto RET
  817.       End If 
  818.    End If 
  819.    DX=Key State(79)-Key State(78)
  820.    If DX<>0
  821.       If BONUS(Y)+DX>=0 and BONUS(Y)+DX<=200
  822.          Add BONUS(Y),DX
  823.          Gosub CALC
  824.          Gosub ALL
  825.          T=Y
  826.          M=1
  827.          Gosub TRACE
  828.          Wait Vbl 
  829.       End If 
  830.    End If 
  831. Loop 
  832.  
  833. ALL:
  834. For A=1 To 30
  835.    T=A
  836.    M=0
  837.    If A<>Y
  838.       Gosub TRACE
  839.    End If 
  840. Next 
  841. Return 
  842.  
  843. TRACE:
  844. Pen 2 : Paper 0
  845. 'T: Position Y 
  846. YS=T*8
  847. XS=200
  848. P=PS(T)
  849. If M=1 Then Ink 5 Else Ink 4
  850. If P>1 Then Bar XS,YS To XS+P,YS+7 Else Box XS,YS To XS+P,YS+7
  851. If M=1 Then Ink 7 Else Ink 0
  852. If P<99 Then Bar XS+P+1,YS To XS+100,YS+7 Else Box XS+P+1,YS To XS+100,YS+7
  853. Locate 40,T : Print BONUS(T);" "
  854. Locate 45,T : Print POUR(T);" % "
  855. Pen 4
  856. Locate 40,32 : Print TT
  857. Return 
  858.  
  859.  
  860.  
  861.  
  862.  
  863. CALC:
  864. TT=0
  865. MA=0
  866. For A=1 To 30
  867.    Add TT,BONUS(A)
  868.    If BONUS(A)>MA Then MA=BONUS(A)
  869. Next 
  870. For A=1 To 30
  871.    If TT=0
  872.       POUR(A)=0
  873.       PS(A)=0
  874.    Else 
  875.       POUR(A)=(BONUS(A)*100)/TT
  876.       PS(A)=(BONUS(A)*100)/MA
  877.    End If 
  878. Next 
  879.  
  880. Return 
  881.  
  882. POSEBONUS:
  883. Screen To Front 4 : Screen Show 4 : Screen 4
  884. While Mouse Key
  885. Wend 
  886. Repeat 
  887.    X=X Screen(X Mouse)/16
  888.    M=Mouse Key
  889.    If M=2 Then Screen Hide 4 : Goto MAIN
  890. Until(M=1 and X>=0 and X<NBBONUS)
  891. C=RBONUS(X+1)
  892. If C=0 Then Goto POSEBONUS
  893. CHOIX=C+64 : Rem <-- d�calage pour les bonus
  894. N=NBONUS(X+1)
  895. _GETBL[N]
  896. Screen Hide 4
  897. Goto MAIN
  898.  
  899.  
  900. REGLAGES:
  901. Screen Open 0,640,256,8,Hires : Paper 0 : Curs Off : Cls 0 : Flash Off : Hide On 
  902.  
  903. If V(1)=0
  904.    NOM$="<Proxima>"
  905.    V(1)=3*60*50
  906.    V(2)=5*60*50
  907.    V(3)=2
  908.    V(4)=1
  909.    V(5)=3
  910.    V(6)=0
  911.    V(7)=1
  912.    V(8)=0
  913.    V(9)=0
  914.    V(10)=15 : Rem    Temps bombe 
  915.    V(11)=-1 : Rem    Autofire
  916. End If 
  917.  
  918. BOUCLE:
  919. Cls 
  920. Home 
  921. ' Offset 
  922. Y(0)=Y Curs
  923. Print "0. Nom du level : "
  924. Print 
  925. Y(1)=Y Curs
  926. Print "1. Time Alert : "
  927. Y(2)=Y Curs
  928. Print "2. Time Out : "
  929. Print 
  930. Y(3)=Y Curs
  931. Print "3. Speed (1,2,4) : "
  932. Y(4)=Y Curs
  933. Print "4. Bombes (1-20) : "
  934. Y(5)=Y Curs
  935. Print "5. Flammes (3,5,50) : "
  936. Y(6)=Y Curs
  937. Print "6. Pousse Bombes (0,1) : "
  938. Print 
  939. Y(7)=Y Curs
  940. Print "7. Nombre de tours fin level :"
  941. Print 
  942. Y(8)=Y Curs
  943. Print "8. N� Palette :"
  944. Print "0=Normal, 1=Alien, 2=Antique, 3=Tronic, 4=Wood, 5=Dyna"
  945. Print 
  946. Y(9)=Y Curs
  947. Print "9. N� Flamme :"
  948. Print "0=Bib, 1=Chaude, 2=Lazer"
  949. Print 
  950. Y(10)=Y Curs
  951. Print "A. Time bombe :"
  952. Print "(Timer=2,Fast=8,Normal=15,Slow=30)"
  953. Print 
  954. Y(11)=Y Curs
  955. Print "B. Autofire :"
  956. Print "(Par d�faut=-1  Dynablaster=0)"
  957.  
  958.  
  959. '4 positions 
  960. ' palette
  961. ' flamme 
  962. ' BINAIRE
  963. ' Nom  
  964.  
  965. For A=1 To 11
  966.    Locate 30,Y(A)
  967.    If A=1 or A=2
  968.       PTIME[V(A)]
  969.    Else 
  970.       Print V(A)
  971.    End If 
  972. Next 
  973. Locate 30,Y(0) : Print NOM$
  974.  
  975. While Key State(64)
  976. Wend 
  977. Clear Key 
  978. Do 
  979.    If Key State(64)
  980.       Screen Open 0,320,256,64,Lowres : Paper 0 : Curs Off : Cls 0 : Flash Off : Hide On 
  981.       Show On 
  982.       Get Palette 1
  983.       RETRACE
  984.       While Key State(64)
  985.       Wend 
  986.       Goto MAIN
  987.    End If 
  988.    A$=Lower$(Inkey$)
  989.    A=Val(A$)
  990.    If A$="0"
  991.       Locate 30,Y(0) : Print Space$(20)
  992.       Locate 30,Y(A)
  993.       Clear Key 
  994.       Input "";NOM$
  995.    End If 
  996.    If A$>="a"
  997.       A=Asc(A$)-Asc("a")+10
  998.    End If 
  999.    If A>0 and A<=11
  1000.       Locate 30,Y(A) : Print Space$(20)
  1001.       Locate 30,Y(A)
  1002.       Clear Key 
  1003.       If A=1 or A=2
  1004.          V=V(A)/50
  1005.          MN=V/60
  1006.          SEC=V mod 60
  1007.          F$=Str$(MN)-" "
  1008.          If SEC>0
  1009.             F$=F$+"."+Str$(SEC)-" "
  1010.          End If 
  1011.          Put Key(F$)
  1012.       Else 
  1013.          Put Key(Str$(V(A))-" ")
  1014.       End If 
  1015.       Input "";B$
  1016.       If A=1 or A=2
  1017.          TIME[B$]
  1018.          V(A)=Param
  1019.       Else 
  1020.          V(A)=Val(B$-" ")
  1021.       End If 
  1022.       Goto BOUCLE
  1023.    End If 
  1024.    
  1025. Loop 
  1026.  
  1027. Procedure TIME[B$]
  1028.    
  1029.    I=Instr(B$,".")
  1030.    If I=0 Then MN=Val(B$) : SEC=0 : Goto ROI
  1031.    
  1032.    MN=Val(Left$(B$,I-1))
  1033.    SEC=Val(Mid$(B$,I+1))
  1034.    
  1035.    ROI:
  1036.    
  1037.    V=(SEC+MN*60)*50
  1038.    
  1039. End Proc[V]
  1040.  
  1041. Procedure PTIME[V]
  1042.    
  1043.    'Afficher Mn:Sec depuis des 50�mes de seconde
  1044.    
  1045.    V=V/50
  1046.    MN=V/60
  1047.    SEC=V mod 60
  1048.    Print MN;" mn ";
  1049.    If SEC<>0
  1050.       Print SEC;" s"
  1051.    Else 
  1052.       Print 
  1053.    End If 
  1054. End Proc
  1055.  
  1056. HELP:
  1057. Screen Open 0,640,256,2,Hires : Paper 0 : Curs Off : Cls 0 : Flash Off : Hide On 
  1058. Palette $B,$FF0
  1059. While Key State(95)
  1060. Wend 
  1061.  
  1062. Print ' "Esc" Quit'
  1063. Print 
  1064. Print ' "L" Load level '
  1065. Print ' "S" Save level'
  1066. Print 
  1067. Print ' "T" Teleport mode: "Del" Delete a teleport'
  1068. Print ' "B" Bonus mode: "R" Restore old values'
  1069. Print ' "F" Fin de niveau: d�terminer le rectangle de r�tr�cissement'
  1070. Print ' "P" Players positions at start of level'
  1071. Print ' Space: Some settings'
  1072. Print 
  1073. Print ' F10: Put a bonus on level'
  1074. Print ' RMB: Select bloc:  RMB:Select drawing'
  1075.  
  1076.  
  1077. While Not Key State(95)
  1078. Wend 
  1079. Screen Open 0,320,256,64,Lowres : Paper 0 : Curs Off : Cls 0 : Flash Off : Hide On 
  1080. Show On 
  1081. Get Palette 1
  1082. RETRACE
  1083. Goto MAIN
  1084.  
  1085.  
  1086. RECTANGLE:
  1087. Screen Open 3,320,256,64,Lowres : Paper 0 : Curs Off : Cls 0 : Flash Off 
  1088. Screen Hide 3
  1089. Screen 0
  1090. RETRACE
  1091.  
  1092. If REC(2,2)=0
  1093.    REC(1,1)=1
  1094.    REC(2,1)=1
  1095.    REC(1,2)=17
  1096.    REC(2,2)=13
  1097. End If 
  1098.  
  1099.  
  1100. While Key State(35)
  1101. Wend 
  1102.  
  1103. Screen Copy 0 To 3
  1104. MAINR:
  1105. Ink 4
  1106. If REC(1,1)>REC(1,2) Then Swap REC(1,1),REC(1,2)
  1107. If REC(2,1)>REC(2,2) Then Swap REC(2,1),REC(2,2)
  1108. Screen Copy 3 To 0
  1109. Box REC(1,1)*16+8,REC(2,1)*16+8 To REC(1,2)*16+8,REC(2,2)*16+8
  1110. V=V(7)-1
  1111. Box(REC(1,1)+V)*16+8,(REC(2,1)+V)*16+8 To(REC(1,2)-V)*16+8,(REC(2,2)-V)*16+8
  1112. Do 
  1113.    If Key State(35)
  1114.       Screen Close 3
  1115.       RETRACE
  1116.       While Key State(35)
  1117.       Wend 
  1118.       Goto MAIN
  1119.    End If 
  1120.    
  1121.    M=Mouse Key
  1122.    If M=1 Then Goto HAUTGAUCHE
  1123.    If M=2 Then Goto BASDROITE
  1124. Loop 
  1125. HAUTGAUCHE:
  1126. Ink 4
  1127. While Mouse Key
  1128. Wend 
  1129. Do 
  1130.    M=Mouse Key
  1131.    X=X Screen(X Mouse)/16
  1132.    Y=Y Screen(Y Mouse)/16
  1133.    If M=2 Then Goto MAINR
  1134.    
  1135.    Screen Copy 3 To 0
  1136.    Box X*16+8,Y*16+8 To REC(1,2)*16+8,REC(2,2)*16+8
  1137.    Wait Vbl 
  1138.    If M=1 Then Exit 
  1139. Loop 
  1140. REC(1,1)=X
  1141. REC(2,1)=Y
  1142. While Mouse Key
  1143. Wend 
  1144. Goto MAINR
  1145.  
  1146. BASDROITE:
  1147. While Mouse Key
  1148. Wend 
  1149. Do 
  1150.    M=Mouse Key
  1151.    If M=1 Then Goto MAINR
  1152.    X=X Screen(X Mouse)/16
  1153.    Y=Y Screen(Y Mouse)/16
  1154.    
  1155.    Screen Copy 3 To 0
  1156.    Box REC(1,1)*16+8,REC(2,1)*16+8 To X*16+8,Y*16+8
  1157.    Wait Vbl 
  1158.    If M=2 Then Exit 
  1159. Loop 
  1160. REC(1,2)=X
  1161. REC(2,2)=Y
  1162. While Mouse Key
  1163. Wend 
  1164. Goto MAINR
  1165.  
  1166.  
  1167.  
  1168.  
  1169. POSITION:
  1170. Screen Open 3,320,256,64,Lowres : Paper 0 : Curs Off : Cls 0 : Flash Off 
  1171. Screen Hide 3
  1172. Screen 0
  1173. RETRACE
  1174. ' je pr�vois 8 joueurs, pour le futur.... ;-)
  1175. If POS(1,1)=0
  1176.    POS(1,1)=1 : POS(1,2)=1
  1177.    POS(2,1)=17 : POS(2,2)=13
  1178.    POS(3,1)=17 : POS(3,2)=1
  1179.    POS(4,1)=1 : POS(4,2)=13
  1180.    POS(5,1)=9 : POS(5,2)=1
  1181.    POS(6,1)=17 : POS(6,2)=7
  1182.    POS(7,1)=9 : POS(7,2)=13
  1183.    POS(8,1)=1 : POS(8,2)=7
  1184. End If 
  1185.  
  1186. While Key State(25)
  1187. Wend 
  1188.  
  1189. Screen Copy 0 To 3
  1190. MAINP:
  1191. Ink 4,16
  1192. Screen Copy 3 To 0
  1193. For A=1 To 8
  1194.    PX=POS(A,1)*16+8
  1195.    PY=POS(A,2)*16+8
  1196.    Circle PX,PY,3
  1197.    Text PX,PY+8,Str$(A)-" "
  1198. Next 
  1199. Clear Key 
  1200. Do 
  1201.    If Key State(25)
  1202.       Screen Close 3
  1203.       RETRACE
  1204.       While Key State(25)
  1205.       Wend 
  1206.       Goto MAIN
  1207.    End If 
  1208.    
  1209.    A$=Inkey$
  1210.    B=Val(A$)
  1211.    If B>=1 and B<=8 Then Exit 
  1212.    
  1213. Loop 
  1214. Screen Copy 3 To 0
  1215. For A=1 To 8
  1216.    If A<>B
  1217.       PX=POS(A,1)*16+8
  1218.       PY=POS(A,2)*16+8
  1219.       Circle PX,PY,3
  1220.       Text PX,PY+8,Str$(A)-" "
  1221.    End If 
  1222. Next 
  1223.  
  1224.  
  1225. Do 
  1226.    X=X Screen(X Mouse)/16
  1227.    Y=Y Screen(Y Mouse)/16
  1228.    M=Mouse Key
  1229.    If M=1 Then Exit 
  1230. Loop 
  1231. POS(B,1)=X
  1232. POS(B,2)=Y
  1233.  
  1234. Goto MAINP